package com.ccys.db.vo.app.launchingTheApp;

import com.ccys.db.vo.app.callStandByScreen.DeliveryFeeDetailMakeVo;
import com.ccys.db.vo.app.callStandByScreen.PrescriptionMakeVo;
import com.ccys.db.vo.app.callStandByScreen.ReferralsMakeVo;
import com.ccys.db.vo.app.splashscreen.AllergiesMakeVo;
import com.ccys.db.vo.app.splashscreen.MedicationReactionsMakeVo;
import com.ccys.db.vo.app.splashscreen.SymptomMakeVo;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * @program: WhiteCoat
 * @description: 更新充值药物接口返回Vo
 * @author: ZhangJingCan
 * @create: 2024-01-18 10:11
 **/

@Data
public class UpdateResetMedicationVo {

    @JsonProperty("id")
    private String id;

    @JsonProperty("code")
    private String code;

    @JsonProperty("created_on")
    private Date createdOn;

    @JsonProperty("age")
    private Integer age;

    /**
     * 状态，对方返回:Consulted
     */
    @JsonProperty("status")
    private String status;

    @JsonProperty("status_value")
    private Integer statusValue;

    @JsonProperty("sub_status_value")
    private Integer subStatusValue;

    @JsonProperty("sub_status")
    private String subStatus;

    @JsonProperty("is_deleted")
    private Boolean isDeleted;

    /**
     * 对方返回False字符串
     */
    @JsonProperty("booking_is_delivery")
    private String bookingIsDelivery;

    /**
     * 对方返回False字符串
     */
    @JsonProperty("is_reset_medication")
    private String isResetMedication;

    @JsonProperty("allow_promo_code")
    private Boolean allowPromoCode;

    @JsonProperty("show_receipt")
    private Boolean showReceipt;

    /**
     * 货币，对方返回：RM
     */
    @JsonProperty("currency")
    private String currency;

    @JsonProperty("is_allow_change_timeslot_address")
    private Boolean isAllowChangeTimeslotAddress;

    @JsonProperty("is_show_book_time_slot")
    private Boolean isShowBookTimeSlot;

    @JsonProperty("is_request_upload_file")
    private Boolean isRequestUploadFile;

    @JsonProperty("is_input_promo_code")
    private Boolean isInputPromoCode;

    @JsonProperty("consult_ended_more_than_24_hour")
    private Boolean consultEndedMoreThan24Hour;

    /**
     * 类型，对方返回Self字符串
     */
    @JsonProperty("type")
    private String type;

    @JsonProperty("aia_identifier_checked")
    private Boolean aiaIdentifierChecked;

    @JsonProperty("memo_email")
    private String memoEmail;

    @JsonProperty("log_date")
    private String logDate;

    /**
     * 病人所在国家
     */
    @JsonProperty("patient_country_of_residence")
    private Integer patientCountryOfResidence;

    /**
     * 医生所在国家
     */
    @JsonProperty("doctor_country_of_residence")
    private Integer doctorCountryOfResidence;

    @JsonProperty("show_process")
    private Boolean showProcess;

    @JsonProperty("booking_country_remark")
    private String bookingCountryRemark;

    @JsonProperty("medication_header")
    private String medicationHeader;

    @JsonProperty("bph_pharmacy_note")
    private String bphPharmacyNote;

    @JsonProperty("bph_pharmacy_more_infomation")
    private String bphPharmacyMoreInfomation;

    @JsonProperty("bph_delivery_note")
    private String bphDeliveryNote;

    @JsonProperty("reactivate_consult")
    private Integer reactivateConsult;

    @JsonProperty("booking_consultation_type")
    private Integer bookingConsultationType;

    @JsonProperty("consultation_type")
    private String consultationType;

    /**
     * 是否免收问诊费
     * tbl_booking_fee表的waiveConsultationFeeFlag 0代表否，1代表是
     */
    @JsonProperty("is_waive_consultation_fee")
    private Boolean isWaiveConsultationFee;

    /**
     * waive掉的问诊费用
     * tbl_booking_fee表的waiveConsultationFee
     */
    @JsonProperty("waive_consultation_fee")
    private BigDecimal waiveConsultationFee;

    /**
     * 是否免收运费
     * tbl_booking_fee表的waiveDeliveryFeeFlag
     */
    @JsonProperty("is_waive_delivery_fee")
    private Boolean isWaiveDeliveryFee;

    /**
     * 是否免收药费
     * tbl_booking_fee表的waiveMedicationFeeFlag
     */
    @JsonProperty("is_waive_medication_fee")
    private Boolean isWaiveMedicationFee;

    /**
     * 免收药物的费用
     * tbl_booking_fee表的waiveMedicationFee
     */
    @JsonProperty("waive_medication_fee")
    private BigDecimal waiveMedicationFee;

    /**
     * 是否waive掉practice费用
     * tbl_booking_fee表的waivePracticeFeeFlag
     */
    @JsonProperty("is_waive_practice_fee")
    private Boolean isWaivePracticeFee;

    /**
     * Waive掉问诊费用的理由
     * tbl_booking_fee表的waiveConsultationReason
     */
    @JsonProperty("waive_consultation_reason")
    private String waiveConsultationReason;

    /**
     * 咨询总金额？todo
     */
    @JsonProperty("total_cost_consulation")
    private BigDecimal totalCostConsulation;

    @JsonProperty("total_cost_consulation_after_discount")
    private BigDecimal totalCostConsulationAfterDiscount;

    @JsonProperty("surcharge_fee")
    private BigDecimal surchargeFee;

    @JsonProperty("is_waive_medical_service")
    private Boolean isWaiveMedicalService;

    @JsonProperty("waive_medical_service_reason")
    private String waiveMedicalServiceReason;

    @JsonProperty("waive_medical_service_fee")
    private BigDecimal waiveMedicalServiceFee;

    @JsonProperty("subtotal_cost_medical_service")
    private BigDecimal subtotalCostMedicalService;

    @JsonProperty("total_cost_prescription")
    private BigDecimal totalCostPrescription;

    @JsonProperty("specialisation_id")
    private Integer specialisationId;

    @JsonProperty("is_doctor_ready")
    private Boolean isDoctorReady;

    @JsonProperty("is_patient_ready")
    private Boolean isPatientReady;

    @JsonProperty("delivery_fee")
    private BigDecimal deliveryFee;

    /**
     * 合作公司
     */
    @JsonProperty("partner_company")
    private PartnerCompanyMakeVo partnerCompany;

    @JsonProperty("is_clinic_whitecoat")
    private Boolean isClinicWhitecoat;

    /**
     * 医生诊所标志
     * https://whcapi-qa.whitecoat.global/v1/pub/Component/ViewImage?&acc_type=HZDiYu4ZKwErP%2fQTBRkMJg%3d%3d&acc_id=5Ce8zVpy5LyDERTRSkFulg%3d%3d&img_type=DcjeOVUCu03dmLLsjjWfVA%3d%3d&latest_update=638411692990000000
     */
    @JsonProperty("doctor_clinic_logo")
    private String doctorClinicLogo;

    /**
     * 医生诊所地址
     * 201 Henderson Road | Apex @Henderson | #05-11/12 | Singapore 159545 | T: +65 6909 6609 | F: +65 6909 6606 | E: contactus@whitecoat.global
     */
    @JsonProperty("doctor_clinic_address")
    private String doctorClinicAddress;

    /**
     * 重新安排或者取消？
     * 对方返回：Description\nPlease note that you will not be able to cancel your appointment once it has been confirmed.  \n\nYou will be able to reschedule your appointment. Appoinments must be rescheduled at least 3 hours prior to the original booking. There will be a IDR 50000 administrative charge for each reschedule from the 3rd time onwards.
     */
    @JsonProperty("reschedule_or_cancel_policy")
    private String rescheduleOrCancelPolicy;

    /**
     * 合作关系
     */
    @JsonProperty("partnership")
    private PartnershipMakeVo partnership;

    /**
     * 运费明细？
     * todo
     */
    @JsonProperty("delivery_fee_detail")
    private DeliveryFeeDetailMakeVo deliveryFeeDetail;

    @JsonProperty("is_surcharge_fee")
    private Boolean isSurchargeFee;

    @JsonProperty("practice_fee")
    private BigDecimal practiceFee;

    @JsonProperty("grand_total")
    private BigDecimal grandTotal;

    /**
     * 税？
     * todo
     */
    @JsonProperty("tax")
    private TaxMakeVo tax;

    /**
     * 含税总额
     */
    @JsonProperty("grand_total_included_tax")
    private BigDecimal grandTotalIncludedTax;

    /**
     * 总付款金额
     */
    @JsonProperty("grand_total_payment")
    private BigDecimal grandTotalPayment;

    /**
     * 咨询开始时间
     */
    @JsonProperty("consultant_begin_date")
    private Date consultantBeginDate;

    /**
     * 咨询结束时间
     */
    @JsonProperty("consultant_end_date")
    private Date consultantEndDate;

    /**
     * 是否需要转介绍信？
     */
    @JsonProperty("need_medical_letter")
    private Boolean needMedicalLetter;

    /**
     * 转介绍信代码？
     */
    @JsonProperty("medical_letter_code")
    private String medicalLetterCode;

    /**
     * 转介绍信内容？
     */
    @JsonProperty("medical_letter")
    private String medicalLetter;

    /**
     * 是否需要医疗证明？
     */
    @JsonProperty("need_medical_certification")
    private Boolean needMedicalCertification;

    /**
     * 医疗证明代码？
     */
    @JsonProperty("medical_certification_code")
    private String medicalCertificationCode;

    /**
     * 医疗证明开始时间？
     */
    @JsonProperty("medical_certification_begin_date")
    private Date medicalCertificationBeginDate;

    /**
     * 医疗证明结束时间？
     */
    @JsonProperty("medical_certification_end_date")
    private Date medicalCertificationEndDate;

    /**
     * 医疗证明附加说明?
     */
    @JsonProperty("medical_certification_additional_note")
    private String medicalCertificationAdditionalNote;

    /**
     * 医疗证明PDF下载地址：https://s3-ap-southeast-1.amazonaws.com/prv.staging.whitecoat.global/Consultation/ReferralLetter/.pdf?AWSAccessKeyId=AKIAIHBBQGPKQR7KO5BQ&Expires=1706148499&Signature=veTOomotEbBKyaLH0vulkUrWEG8%3D
     */
    @JsonProperty("medical_letter_url")
    private String medicalLetterUrl;

    /**
     * 诊断
     */
    @JsonProperty("diagnosis")
    private String diagnosis;

    /**
     * 标记病人ID
     */
    @JsonProperty("flag_patient_id")
    private String flagPatientId;

    /**
     * 标记病人备注
     */
    @JsonProperty("flag_patient_note")
    private String flagPatientNote;

    /**
     * 医生端填写的complaint
     * tbl_booking_summary表的presentingComplaint字段
     */
    @JsonProperty("presenting_complaint")
    private String presentingComplaint;

    /**
     * 医生端填写的management
     * tbl_booking_summary表的management
     */
    @JsonProperty("management")
    private String management;

    /**
     * 医生填写的instructions
     * tbl_booking_summary表的instructionsToPatient
     */
    @JsonProperty("instructions_to_patient")
    private String instructionsToPatient;

    /**
     * 这是啥？返回的值为字符串的："d5cde303-1399-4fcd-a835-c35d1c20c4a9-10306515823981"
     * todo
     */
    @JsonProperty("twilio_room")
    private String twilioRoom;

    /**
     * 孩子？对方返回null，这里是什么类型的返回？
     * todo 需要确认类型和返回数据
     */
    @JsonProperty("child")
    private String child;

    /**
     * 二维码 todo
     */
    @JsonProperty("QR_code")
    private String QRCode;

    /**
     * 这是啥，对方返回："0366"
     * todo
     */
    @JsonProperty("pin_code")
    private String pinCode;

    /**
     * 显示备忘录？todo
     */
    @JsonProperty("show_memo")
    private Boolean showMemo;

    /**
     * 备忘录内容？todo
     */
    @JsonProperty("memo")
    private String memo;

    /**
     * 备忘录附件，需要确定类型和内容，是字符串的URL？todo
     */
    @JsonProperty("memo_attached_files")
    private String memoAttachedFiles;

    /**
     * 患者所在位置
     */
    @JsonProperty("patient_location")
    private String patientLocation;

    /**
     * 患者所在诊所名称
     */
    @JsonProperty("patient_clinic_name")
    private String patientClinicName;

    /**
     * 患者签名？todo 需要确认字段类型和返回值是什么
     */
    @JsonProperty("patient_signature")
    private String patientSignature;

    /**
     * 锁定患者信息
     * 取member表的值就行
     */
    @JsonProperty("lockedPatientInfo")
    private LockedPatientInfoMakeVo lockedPatientInfo;

    /**
     * 锁定的孩子详情？todo 需要确定字段类型，和返回数据，对方返回的null
     */
    @JsonProperty("lockedChildInfo")
    private String lockedChildInfo;

    /**
     * 队列编号
     */
    @JsonProperty("queue_no")
    private Integer queueNo;

    /**
     * 等待时间，对方返回空字符串。
     */
    @JsonProperty("waiting_time")
    private String waitingTime;

    /**
     * 总咨询人数？todo
     */
    @JsonProperty("total_consulation")
    private Integer totalConsulation;

    /**
     * 反馈？对方返回的字符串的"false" todo
     */
    @JsonProperty("feedback")
    private String feedback;

    /**
     * 好多表都有，到底取哪个表？
     */
    @JsonProperty("G6PD")
    private Boolean G6PD;

    /**
     * 是否怀孕，member表
     */
    @JsonProperty("pregnant")
    private Boolean pregnant;

    /**
     * 是否是aia的保险？
     */
    @JsonProperty("aia_member")
    private Boolean aiaMember;

    /**
     * member表？
     */
    @JsonProperty("aia_identifier")
    private String aiaIdentifier;

    /**
     * 总计，取什么地方的总计？
     */
    @JsonProperty("sum_grand_total")
    private BigDecimal sumGrandTotal;

    /**
     * 总税费
     */
    @JsonProperty("sum_tax_fee")
    private BigDecimal sumTaxFee;

    /**
     * 总计 已含税总额
     */
    @JsonProperty("sum_grand_total_included_tax")
    private BigDecimal sumGrandTotalIncludedTax;

    /**
     * 专家？对方返回null，todo 需要确定字段类型和返回数据
     */
    @JsonProperty("specialist")
    private String specialist;

    /**
     * 快递类型？对方返回字符串："Self_collect"
     */
    @JsonProperty("delivery_type")
    private String deliveryType;

    /**
     * 快递地址，对方返回null
     */
    @JsonProperty("delivery_address")
    private String deliveryAddress;

    /**
     * 药房，对方返回数据格式为集合内包含对象。
     */
    @JsonProperty("pharmacy")
    private List<PharmacyMakeVo> pharmacy;

    /**
     * 药房地址,对方返回："201 Henderson Road | Apex @Henderson | #05-11/12 | Singapore 159545 | T: +65 6909 6609 | F: +65 6909 6606 | E: contactus@whitecoat.global"
     */
    @JsonProperty("pharmacy_address")
    private String pharmacyAddress;

    /**
     * 医生信息
     */
    @JsonProperty("doctor")
    private DoctorMakeVo doctor;

    /**
     * 快递信息？对方返回null - todo 这里需要确认返回类型和具体数据
     */
    @JsonProperty("delivery_info")
    private String deliveryInfo;

    /**
     * 快递类型？ todo
     */
    @JsonProperty("express_type")
    private Integer expressType;

    /**
     * 司机须知？todo
     */
    @JsonProperty("note_to_driver")
    private String noteToDriver;

    /**
     * 授权人姓名 todo  返回的null
     */
    @JsonProperty("authorised_person_name")
    private String authorisedPersonName;

    /**
     * 授权人员识别，todo 返回的null
     */
    @JsonProperty("authorised_person_identification")
    private String authorisedPersonIdentification;

    /**
     * 授权人员电话
     */
    @JsonProperty("authorised_person_phone")
    private String authorisedPersonPhone;

    /**
     * 授权人员国家ID
     */
    @JsonProperty("authorised_person_country_id")
    private String authorisedPersonCountryId;

    /**
     * 药物包装照片，todo 这里返回的一个空集合[]
     */
    @JsonProperty("medication_package_photos")
    private String medicationPackagePhotos;

    /**
     * 支付信息
     */
    @JsonProperty("payment")
    private PaymentMakeVo payment;

    /**
     * 配置文件ID 对方返回的是integer 类型的0，todo：需要确认我们的id类型
     */
    @JsonProperty("profile_type_id")
    private Integer profileTypeId;

    /**
     * AIA企业保险？对方返回null todo 需要确认字段类型和如果存在这个保险返回什么数据
     */
    @JsonProperty("aia_corporate")
    private String aiaCorporate;

    /**
     * 病人收据标签？todo 需要确认字段类型，以及查询方法，对方返回null无法确认类型
     */
    @JsonProperty("patient_receipt_label")
    private String patientReceiptLabel;

    /**
     * booking的CDMP的费用
     */
    @JsonProperty("booking_cdmp_fee")
    private BigDecimal bookingCdmpFee;

    /**
     * todo:需要确认字段类型以及查什么
     */
    @JsonProperty("recommend_reading")
    private String recommendReading;

    /**
     * 上传文件的文件地址？对方返回null，需要确认字段类型以及返回数据
     */
    @JsonProperty("upload_files")
    private String uploadFiles;

    /**
     * 添加药物价格？todo
     */
    @JsonProperty("addition_meds_price")
    private BigDecimal additionMedsPrice;

    /**
     * 是否AIA零咨询费？ todo
     */
    @JsonProperty("aia_zero_consult_fee")
    private Boolean aiaZeroConsultFee;

    /**
     * 是否在收据上显示诊断内容？todo
     */
    @JsonProperty("is_show_diagnosis_on_receipt")
    private Boolean isShowDiagnosisOnReceipt;

    /**
     * 是否已注册到CDMP？ todo
     */
    @JsonProperty("is_enrolled_to_cdmp")
    private Boolean isEnrolledToCdmp;

    /**
     * 企业，返回null，和GetProfile一样有个这个字段，类型不确定，返回数据不确定 todo
     */
    @JsonProperty("corporate")
    private String corporate;

    /**
     * 订阅，todo 不知道字段类型，不知道返回数据
     */
    @JsonProperty("subscription")
    private String subscription;

    /**
     * 症状集合
     */
    @JsonProperty("symptoms")//查询tbl_symptom 表所有，未删除数据
    private List<SymptomMakeVo> symptoms;

    /**
     * 症状照片，字段类型不明确，返回值不明确，可能是一个集合装着n个照片地址？todo
     */
    @JsonProperty("symptoms_photos")
    private String symptomsPhotos;

    /**
     * 要去集合？对方返回空[]集合，不知道具体返回什么数据，什么类型。todo
     */
    @JsonProperty("medications")
    private String medications;

    /**
     * 过敏症状
     * 参考GetProfile怎么取的
     */
    @JsonProperty("allergies")
    private List<AllergiesMakeVo> allergies;

    /**
     * 药物反应
     * 参考GetProfile怎么取的
     */
    @JsonProperty("medication_reactions")
    private List<MedicationReactionsMakeVo> medicationReactions;

    /**
     * 处方集合？不知道集合内放哪些数据 todo
     */
    @JsonProperty("prescription")
    private List<PrescriptionMakeVo> prescription;

    /**
     * todo 不知道干啥的
     */
    @JsonProperty("is_approved")
    private Boolean isApproved;

    /**
     * todo 不知道干啥的
     */
    @JsonProperty("is_show_asterisk")
    private String isShowAsterisk;

    /**
     * 处方包装集合？ 不知道具体返回什么 todo
     */
    @JsonProperty("package_prescription")
    private String packagePrescription;

    /**
     * 医疗套餐集合？不知道具体返回什么 todo
     */
    @JsonProperty("package_medical_service")
    private String packageMedicalService;

    /**
     * 小计费用套餐处方 todo 怎么计算
     */
    @JsonProperty("subtotal_cost_package_prescription")
    private BigDecimal subtotalCostPackagePrescription;

    /**
     * 医疗服务费用小计？ todo
     */
    @JsonProperty("subtotal_cost_package_medical_service")
    private BigDecimal subtotalCostPackageMedicalService;

    /**
     * 服务折扣总金额？ todo
     */
    @JsonProperty("service_bin_total_discount_amount")
    private String serviceBinTotalDiscountAmount;

    /**
     * CDMP 套餐？ todo 需要确定类型，返回数据为什么？
     */
    @JsonProperty("cdmp_package")
    private String cdmpPackage;

    /**
     * 医疗服务集合？todo
     */
    @JsonProperty("medical_service")
    private String medicalService;

    /**
     * 医疗服务类型
     * 在tbl_medical_service_type 表找
     */
    @JsonProperty("medical_service_type")
    private MedicalServiceTypeMakeVo medicalServiceType;

    /**
     * 药物照片？todo 需要确定返回类型和返回具体数据
     */
    @JsonProperty("medicine_collected_photo")
    private String medicineCollectedPhoto;

    /**
     * 深度链接详细信息？ todo 需要确定类型以及返回数据
     */
    @JsonProperty("deeplink_detail")
    private String deeplinkDetail;

    /**
     * 问诊的孩子详细信息 todo
     */
    @JsonProperty("booking_child_detail")
    private String bookingChildDetail;

    /**
     * 交易流水集合？ 对方返回空集合 todo 需要确定类型和返回具体数据
     */
    @JsonProperty("log_transactions")
    private String logTransactions;

    /**
     * 转介绍信？ todo
     */
    @JsonProperty("referrals")
    private  List<ReferralsMakeVo> referrals;

    /**
     * 付款方式 todo 返回为空字符串，确定返回是什么？
     */
    @JsonProperty("payment_method")
    private String paymentMethod;

    /**
     * 是否已更新配置文件？ todo
     */
    @JsonProperty("is_profile_updated")
    private Boolean isProfileUpdated;

    /**
     * 是否下次继续问诊？ todo
     */
    @JsonProperty("is_next_appointment")
    private String isNextAppointment;

    /**
     * 推荐预约？ todo 返回为null ，需要确认返回的具体类型和具体数据
     */
    @JsonProperty("recommend_appointment")
    private String recommendAppointment;


}
